package com.monitor.filter;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 文字过滤器，用于检测文本中的不良内容
 */
public class TextFilter implements ContentFilter {
    private boolean enabled = true; // 默认启用过滤器
    private FilterSensitivity sensitivity = FilterSensitivity.MEDIUM;
    private List<String> keywords = new ArrayList<>();
    
    public TextFilter() {
        // 初始化默认关键词列表
        initDefaultKeywords();
    }
    
    private void initDefaultKeywords() {
        // 这里添加一些默认的敏感词汇
        keywords.add("色情");
        keywords.add("赌博");
        keywords.add("暴力");
        // 可以根据需要添加更多关键词
    }
    
    @Override
    public boolean containsInappropriateContent(String content) {
        if (content == null || content.isEmpty()) {
            return false;
        }
        
        // 根据灵敏度级别调整匹配策略
        switch (sensitivity) {
            case HIGH:
                return highSensitivityCheck(content);
            case MEDIUM:
                return mediumSensitivityCheck(content);
            case LOW:
                return lowSensitivityCheck(content);
            default:
                return mediumSensitivityCheck(content);
        }
    }
    
    private boolean highSensitivityCheck(String content) {
        // 高灵敏度：部分匹配即可
        for (String keyword : keywords) {
            if (content.contains(keyword)) {
                return true;
            }
        }
        return false;
    }
    
    private boolean mediumSensitivityCheck(String content) {
        // 中灵敏度：需要完整词匹配
        for (String keyword : keywords) {
            Pattern pattern = Pattern.compile("\\b" + Pattern.quote(keyword) + "\\b", Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(content);
            if (matcher.find()) {
                return true;
            }
        }
        return false;
    }
    
    private boolean lowSensitivityCheck(String content) {
        // 低灵敏度：需要多个关键词或特定组合
        int count = 0;
        for (String keyword : keywords) {
            if (content.contains(keyword)) {
                count++;
                if (count >= 2) { // 低灵敏度需要至少两个关键词匹配
                    return true;
                }
            }
        }
        return false;
    }
    
    @Override
    public String getFilterName() {
        return "文字过滤器";
    }
    
    @Override
    public String getFilterDescription() {
        return "通过关键字匹配和语义分析实时拦截含不良信息的网页";
    }
    
    @Override
    public void setSensitivity(FilterSensitivity sensitivity) {
        this.sensitivity = sensitivity;
    }
    
    @Override
    public FilterSensitivity getSensitivity() {
        return sensitivity;
    }
    
    /**
     * 添加自定义关键词
     * @param keyword 要添加的关键词
     */
    public void addKeyword(String keyword) {
        if (keyword != null && !keyword.isEmpty() && !keywords.contains(keyword)) {
            keywords.add(keyword);
        }
    }
    
    /**
     * 移除关键词
     * @param keyword 要移除的关键词
     */
    public void removeKeyword(String keyword) {
        keywords.remove(keyword);
    }
    
    /**
     * 获取所有关键词
     * @return 关键词列表
     */
    public List<String> getKeywords() {
        return new ArrayList<>(keywords);
    }
    
    /**
     * 检查过滤器是否启用
     * @return 如果过滤器启用返回true，否则返回false
     */
    public boolean isEnabled() {
        return enabled;
    }
    
    /**
     * 设置过滤器启用状态
     * @param enabled 是否启用过滤器
     */
    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }
}